As is known in the art, some processors have multiple register banks from which operands are fed to a processing unit that performs a designated operation, e.g., shift, add, subtract etc. A first bank of registers provides operands to one port of the processing unit and the second bank of registers provide operands to a second port of the processing unit. While this arrangement has certain advantages, operands for a given instruction cannot come from the same bank of registers.
In some known assemblers, the programmer typically writes instructions using physical register names (e.g. R0) rather than virtual names (e.g., num_packets), so that register bank conflicts are generally easy to avoid. However, some assemblers enable the use of virtual names. While the ability to use virtual names provides certain advantages, such as ease of use, register bank conflict issues may become more of an issue.
A further issue that can arise in the assembly of source code can occur when the number of physical registers required by the code exceeds the number present in the target hardware.